From c7ef98d3d3f715ad2cea80b9d67b2c058209a545 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Mon, 4 Dec 2023 19:54:21 +0100 Subject: [PATCH] lib-ucode: retry partial writes Signed-off-by: Felix Fietkau --- lib-ucode.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/lib-ucode.c b/lib-ucode.c index 844daf8..8e042e3 100644 --- a/lib-ucode.c +++ b/lib-ucode.c @@ -273,17 +273,33 @@ uc_udebug_pcap_init(struct uc_pcap *p, uc_value_t *args) pcap_init(&p->pcap, &meta); } +static void +write_retry(int fd, const void *data, size_t len) +{ + do { + ssize_t cur; + + cur = write(fd, data, len); + if (cur < 0) { + if (errno == EINTR) + continue; + + return; + } + + data += cur; + len -= cur; + } while (len > 0); +} + static void uc_udebug_pcap_write_block(struct uc_pcap *p) { size_t len; void *data; - int ret; data = pcap_block_get(&len); - do { - ret = write(p->fd, data, len); - } while (ret < 0 && errno == EINTR); + write_retry(p->fd, data, len); } static uc_value_t * -- 2.30.2